package com.ciban.smarthome.module.db.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;

import com.ciban.smarthome.common.utils.logcrash.LogUtil;
import com.ciban.smarthome.module.db.DbBaseDao;
import com.ciban.smarthome.module.entity.Equip_Lamp;
import com.ciban.smarthome.module.entity.Scene;

import java.util.ArrayList;

/**
 * Created by wdl on 2015/11/6.
 */
public class LampDao extends DbBaseDao {
    public LampDao(Context context) {
        super(context, "lamp");
    }

    /*create table lamp(_id integer, scene_id integer default -1,level integer default -1,status integer)*/

    /**
     * 添加新的电灯配置
     *
     * @param info
     * @return
     */
    public long addNewLamp(Equip_Lamp info) {
        ContentValues values = new ContentValues();
        values.put("scene_id", info.getScene_id());
        values.put("status", info.getStatus());
        values.put("level", info.getLevel());
        values.put("_id", info.getId());

        return insert(null, values);
    }

    /**
     * 更新电灯的配置信息
     *
     * @param info
     * @return
     */
    public int upLamp(Equip_Lamp info) {
        ContentValues values = new ContentValues();
        values.put("scene_id", info.getScene_id());
        values.put("status", info.getStatus());
        values.put("level", info.getLevel());
        values.put("_id", info.getId());

        return update(values, "_id=?", new String[]{info.getId()});
    }

    /**
     * 删除电灯
     *
     * @param id
     * @return
     */
    public int delLamp(String id) {
        return del("_id=?", new String[]{id});
    }

    /**
     * 获取电灯所有信息列表(场景id必须为-1)
     *
     * @param area_id
     * @param type
     * @return
     */
    public ArrayList<Equip_Lamp> getLampList(String area_id, int type) {
        ArrayList<Equip_Lamp> list = new ArrayList<Equip_Lamp>();
        String sql = "select  e.[_id],e.[area_id],e.[icon],e.[name],e.[serial_num],e.[type],l.[level],l.[scene_id],l.[status] from equipment e,lamp l where e.[type]=? and e.[area_id]=? and e.[_id]=l.[_id] and l.[scene_id]=-1";
        Cursor cursor = execRawQuery(sql, new String[]{type + "", area_id});
        if (cursor != null) {
            Equip_Lamp info;
            while (cursor.moveToNext()) {
                info = new Equip_Lamp();
                info.setId(cursor.getString(0));
                info.setArea_id(cursor.getString(1));
                info.setIcon_path(cursor.getString(2));
                info.setName(cursor.getString(3));
                info.setSerial_no(cursor.getInt(4));
                info.setType(cursor.getInt(5));
                info.setLevel(cursor.getInt(6));
                info.setScene_id(cursor.getString(7));
                info.setStatus(cursor.getInt(8));

                list.add(info);
            }
        }
        cursor.close();
        closeDb();
        return list;
    }

    /**
     * 获取某个情景当中某个电灯的配置信息
     *
     * @param equip_id
     * @param scene_id
     * @return
     */
    public Equip_Lamp getLampConfig(String equip_id, String scene_id) {
        LogUtil.info("添加电灯场景配置信息:"+equip_id +"--"+scene_id);
        Cursor query = query(new String[]{"level", "status"}, "_id=? and scene_id=?", new String[]{equip_id, scene_id}, null);
        Equip_Lamp info = null;
        if (query != null && query.moveToNext()) {
            info = new Equip_Lamp();
            info.setLevel(query.getInt(0));
            info.setStatus(query.getInt(1));
        }
        return info;
    }

    /**
     * 检查是否有该设备的场景配置存在  若没有则添加
     * @param equip_id
     * @param scene_id
     */
    public void checkSceneConfiExist(String equip_id,String scene_id){
        Cursor query = query(new String[]{"_id"}, "_id=? and scene_id=?", new String[]{equip_id, scene_id}, null);
        if (!(query!=null&&query.moveToNext())){
            ContentValues values=new ContentValues();
            values.put("_id",equip_id);
            values.put("scene_id", scene_id);
            insert(null, values);
        }
    }

    /**
     * 删除情景的相关配置
     * @param scene_id
     */
    public void delScene(String scene_id){
        del("scene_id=?",new String[]{scene_id});
    }

    /**
     * 更新电灯的调光等级
     * @param equip_id
     * @param scene_id
     * @param level
     * @return
     */
    public int updateLampLevel(String equip_id, String scene_id, int level) {
        checkSceneConfiExist(equip_id,scene_id);
        ContentValues values = new ContentValues();
        values.put("level", level);
        return update(values, "_id=? and scene_id=?", new String[]{equip_id, scene_id});
    }

    /**
     * 更新电灯的状态
     * @param equip_id
     * @param scene_id
     * @param status
     * @return
     */
    public int updateLampStatus(String equip_id, String scene_id, int status) {
        checkSceneConfiExist(equip_id,scene_id);
        ContentValues values = new ContentValues();
        values.put("status", status);
        return update(values, "_id=? and scene_id=?", new String[]{equip_id, scene_id});
    }
}
